package com.intct.util;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;

/**
 * @author gufg
 * @since 2025-08-22 16:26
创建预分区
怎么分区？？

Rowkey设计？？？
原则：唯一性、简短、散列性
常用方法：字符串拼接、字符反转、Hash
顺序：字典顺序
字典顺序：|

字符串拼接：
---------------------表预分区
起始rowkey			结束rowkey
第1个预分区			空					0001|
第2个预分区			0001|				0002|
第3个预分区			0002|				0003|
第4个预分区			0003|				0004|
第5个预分区			0004|				0005|
第6个预分区			0005|				空

---------------------RowKey设计
hashcode(17592719330238) % numParations = 3(前补0，如：0003) == 000317592719330238(取余拼接Rowkey)
 */
public class RowkeyUtil {
    public static String getRowkey(String rowkey, int numPatations) {
        // 先hash 再取绝对值 最后取余
        int rowkeyHashCode = Math.abs(rowkey.hashCode()) % numPatations;

        // 左补全--补0
        String leftPadStr = StringUtils.leftPad(String.valueOf(rowkeyHashCode), 4, "0");

        // 进行MD5加密， 截取前12位字符  拼接
        String newRowkey = leftPadStr + DigestUtils.md5Hex(rowkey).substring(0, 12);

        // 16位的rowkey
        return newRowkey;
    }
}
